package ochart.utils
{
	public class StringUtil
	{
		public function StringUtil()
		{
		}
		
		
		/**
		 *  数字前0补足
		 * 
		 *  @param 需要补足的数字
		 * 
		 *  @param 总长度
		 *
		 *  @returns 返回0补足后的数字
		 */
		public static function addZero(number:* , fixLength:int = 2):String
		{
			var str:String = String(number);
			var length:int = fixLength - str.length;
			for (var i:int = 0; i < length; i++) {
				str = "0" + str;
			}
			return str;
        }

		/**
		 *  比较两个字符串是否相同
		 * 
		 *  @param 要比较的字符串1
		 * 
		 *  @param 要比较的字符串2
		 * 
		 *  @param 是否大小写敏感
		 *
		 *  @returns 返回是否相同的布尔值
		 */
		public static function areEqual(s1:String, s2:String, 
											caseSensitive:Boolean=true):Boolean
		{
			if(caseSensitive)
			{
				return (s1 == s2);
			}
			else
			{
				return (s1.toUpperCase() == s2.toUpperCase());
			}
		}
		
		/**
		 *  移除字符串前后空白字符
		 * 
		 *  @param 将被前后去除空字符的字符串
		 *
		 *  @returns 移除前后空白后的字符串
		 */
		public static function trim(input:String):String
		{
			return StringUtil.ltrim(StringUtil.rtrim(input));
		}

		/**
		 *	移除前部空白字符
		 * 
		 *	@param 将被移除前部空白字符的字符串
		 *
		 *	@returns 移除前部空白后的字符串
		 */	
		public static function ltrim(input:String):String
		{
			var size:Number = input.length;
			for(var i:Number = 0; i < size; i++)
			{
				if(input.charCodeAt(i) > 32)
				{
					return input.substring(i);
				}
			}
			return "";
		}

		/**
		 *	移除后部空白字符
		 * 
		 *	@param 将被移除后部空白字符的字符串
		 *
		 *	@returns 移除后部空白后的字符串
		 */
		public static function rtrim(input:String):String
		{
			var size:Number = input.length;
			for(var i:Number = size; i > 0; i--)
			{
				if(input.charCodeAt(i - 1) > 32)
				{
					return input.substring(0, i);
				}
			}

			return "";
		}
		
		/**
		 * 验证字符串是否以指定内容开头
		 * 
		 *  @param 将被验证的字符串
		 *
		 *  @param 开头内容
		 *
		 *  @returns 以指定字符串开头为true, 反之则为false
		 */	
		public static function beginsWith(input:String, prefix:String):Boolean
		{			
			return (prefix == input.substring(0, prefix.length));
		}	

		/**
		 * 验证字符串是否以指定内容结尾
		 * 
		 *  @param 将被验证的字符串
		 *
		 *  @param 结尾内容
		 *
		 *  @returns 以指定字符串结尾为true, 反之则为false
		 */	
		public static function endsWith(input:String, suffix:String):Boolean
		{
			return (suffix == input.substring(input.length - suffix.length));
		}	

		/**
		 * 从字符串中移除所有匹配内容
		 * 
		 *  @param 将被移除匹配内容的字符串
		 *
		 *  @param 指定移除的内容
		 *
		 *  @returns 返回移除匹配内容后的字符串
		 */	
		public static function remove(input:String, remove:String):String
		{
			return StringUtil.replace(input, remove, "");
		}

		/**
		 * 替换所有符合条件的字符串
		 * 
		 *  @param 将被替换内容的字符串
		 *
		 *  @param 将被替换掉的内容
		 *
		 *  @param 将被替换成的内容
		 *
		 *  @returns 被替换后的字符串
		 */
		public static function replace(input:String, replace:String, replaceWith:String):String
		{
			//change to StringBuilder
			var sb:String = new String();
			var found:Boolean = false;

			var sLen:Number = input.length;
			var rLen:Number = replace.length;

			for (var i:Number = 0; i < sLen; i++)
			{
				if(input.charAt(i) == replace.charAt(0))
				{   
					found = true;
					for(var j:Number = 0; j < rLen; j++)
					{
						if(!(input.charAt(i + j) == replace.charAt(j)))
						{
							found = false;
							break;
						}
					}

					if(found)
					{
						sb += replaceWith;
						i = i + (rLen - 1);
						continue;
					}
				}
				sb += input.charAt(i);
			}
			//TODO : if the string is not found, should we return the original
			//string?
			return sb;
		}
		
		/**
		 * 判断字符串是否为空
		 * 
		 *  @param 字符串
		 *
		 *  @returns 返回是否为空布尔值
		 */
		public static function isBlank(input:String):Boolean
		{
			if((input == null || input.length <= 0))
			{
				return true;
			}
			if(trim(input).length <= 0)
			{
				return true;
			}
			return false;	
		}
		
		/**
		 * 判断字符串是否不为空
		 * 
		 *  @param 字符串
		 *
		 *  @returns 返回是否不为空布尔值
		 */
		public static function isNotBlank(input:String):Boolean
		{
			return !isBlank(input);	
		}
			
		/**
		 *  复制文字
		 * 
		 *  @param 字符串
		 * 
		 *  @param 复制次数
		 *
		 *  @returns 返回复制后的文字
		 */
		public static function duplicate(input:String, times:int=1):String
		{
			var output:String = "";
			for(var i:int = 0; i < times; i++)
			{
				output += input;
			}
			return output;
		}
	}
}